// 导入http模块 
import http from 'wechat-http'

// 1. 配置一下接口基础路径
http.baseURL = 'https://live-api.itheima.net'

// 配置请求拦截器
// 请求头上携带token
// 1. 获取token
// 2. 加在请求头上
http.intercept.request = (params) => {
  console.log('请求拦截器', params)
  // 获取token
  const {
    token
  } = getApp()

  // 提升代码可维护性的小技巧
  const defaultHeader = {}
  // 追加请求头
  if (token) defaultHeader.Authorization = token
  // 合并自定义的请求头和公共信息

  params.header = Object.assign(defaultHeader, params.header)
  return params
}


// 配置响应拦截器

http.intercept.response = async ({
  statusCode,
  data,
  config
}) => {
  console.log('响应拦截器', config.url, statusCode)
  // statusCode 为状态码
  if (statusCode === 401) {
    // 获取全局应用实例
    const app = getApp()
    // 判断调用/refreshToken这个接口的时候如果401了代表refresh_token都过期了, 需要登录了
    // 如果本地没有refresh_token那么都不往后进行了
    if (config.url.includes('/refreshToken') || !app.refresh_token) {
      console.log('我是401')
      // 读取历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面
      const currentPage = pageStack[pageStack.length - 1]
      // 找到路径
      const redirectURL = currentPage.route
      // 跳转到登录页
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`
      })
    }
    // 使用 refreshToken 更新 token
    console.log('app', app)
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 这时要注意使用的是 refresh_token
        Authorization: app.refresh_token,
      },
    })
    // 更新 token 和 refresh_token 

    app.setToken(res.data.token, res.data.refreshToken)



    // 重新发一个请求
    // 利用Object.assign 将config重新拼接一下
    return http(
      Object.assign(config, {
        header: {
          Authorization: app.token
        }
      })
    )

  }

  // 过滤接口返回的数据
  return data
}



// 2. 挂载请求方法到全局
wx.http = http

// 3. 支持模块化使用
export default http